package cn.hutool.core.date;

import cn.hutool.core.lang.Pair;
import cn.hutool.core.map.TableMap;
import cn.hutool.core.util.StrUtil;

import java.util.List;

/**
 * 节假日（公历）封装
 *
 * @author Atomicyo
 * @since 5.7.22
 */
public class GregorianFestival {

    /**
     * 公历节日 *表示放假日
	 * 来自https://baike.baidu.com/item/%E4%B8%AD%E5%9B%BD%E8%8A%82%E6%97%A5/3143
     */
    private static final TableMap<Pair<Integer, Integer>, String> G_FTV = new TableMap<>(16);

    static {
        //节日

        //一月
        G_FTV.put(new Pair<>(1, 1), "元旦");

        //三月
        G_FTV.put(new Pair<>(3, 8), "妇女节");
        G_FTV.put(new Pair<>(3, 12), "植树节");

        //五月
        G_FTV.put(new Pair<>(5, 1), "劳动节");
        G_FTV.put(new Pair<>(5, 4), "青年节");

        //六月
        G_FTV.put(new Pair<>(6, 1), "儿童节");

        //七月
        G_FTV.put(new Pair<>(7, 1), "建党节");

        //八月
        G_FTV.put(new Pair<>(8, 1), "建军节");

        //九月
        G_FTV.put(new Pair<>(9, 10), "教师节");

        //十月
        G_FTV.put(new Pair<>(10, 1), "国庆节");
    }

    /**
     * 获得节日列表
     *
     * @param month 月
     * @param day   日
     * @return 获得公历节日
     */
    public static List<String> getFestivals(int month, int day) {
        return G_FTV.getValues(new Pair<>(month, day));
    }

    /**
     * 获得节日(以,分割)
     *
     * @param month 月
     * @param day   日
     * @return 获得公历节日
     */
    public static String getFestivalsString(int month, int day) {
        return StrUtil.join(",", GregorianFestival.getFestivals(month, day));
    }
}
